//
//  ViewController.swift
//  ClickTheCellExpand
//
//  Created by Rookie_YX on 16/7/1.
//  Copyright © 2016年 YX_Rookie. All rights reserved.
//

/**
 *
 *  关注作者:http://www.jianshu.com/users/480a52903ce5/latest_articles
 *  Demo效果当点击单元格时会展开该单元格，便于显示一些详情什么的。
 *  点击其他单元格原来的会关闭，同时有动画效果
 */

import UIKit

class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource{
  
  var selectedSection:NSInteger?
  var indexSet:NSMutableIndexSet =  NSMutableIndexSet()
  var isExpand:Bool = false
  
  override func viewDidLoad() {
    super.viewDidLoad()
    
    // 加载tablelveiw
    view.addSubview(tableView)
    
  }
  
  
  // MARK:-懒加载
  private lazy var tableView:UITableView = {
    
    let tab = UITableView(frame: self.view.bounds, style: .Grouped)
    tab.delegate = self
    tab.dataSource = self
    tab.separatorStyle = UITableViewCellSeparatorStyle.None
    return tab
  }()
  // 标题数据
  private lazy var infoTitleData:[String] = {
    
    let info:[String] = ["label标签","按钮标签","集合视图","UITableView视图"]
    return info
  }()
  // 详细数据
  private lazy var detilInfo:[String] = {
    let info:[String] = [" 浙大美女拍高难度毕业照,网友给跪了! 近日,网友@梁草吉美子发了组九宫格毕业照,网友们纷纷点赞。这组毕业照有两男两女,女生颜值爆表、男生身材超","北京市中考成绩出台，北京十二中初三年级2班的姜海洋同学获得全科580分满分的成绩"]
    return info
  }()
}

// MARK:- tableVeiw数据源,代理
extension ViewController{
  
  func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{
    
    if isExpand && section == selectedSection{
      return self.detilInfo.count  + 1 ?? 0
    }
    return 1
  }
  
  func numberOfSectionsInTableView(tableView: UITableView) -> Int{
    
    return self.infoTitleData.count ?? 0
  }
  
  func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
    
    var cell = tableView.dequeueReusableCellWithIdentifier(String(indexPath.row) + String(indexPath.section)) as? RookieCell
    if cell == nil {
      cell = RookieCell.init(style: .Default, reuseIdentifier: String(indexPath.row) + String(indexPath.section))
    }
    if indexPath.row == 0 {
      cell?.isExpand = false
      if selectedSection == indexPath.section && isExpand {
        cell?.isExpand = true
      }
      cell?.setupTitleUI(self.infoTitleData[indexPath.section])
      cell?.setLayoutUI(.TitleType)
    }
    else{
      cell?.setupDetilUI(self.detilInfo[indexPath.row - 1])
      cell?.setLayoutUI(.CellDetilType)
    }
    
    return cell!
  }
  
  // UITableViewDelegate 方法，处理列表项的选中事件
  func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath){
    
    if indexPath.row == 0{
      isExpand = !isExpand
      selectedSection = indexPath.section
      if isExpand {
        indexSet.addIndex(selectedSection!)
        self.tableView.reloadSections(indexSet, withRowAnimation: .Fade)
      }
      else{
        self.tableView.reloadSections(indexSet, withRowAnimation: .Fade)
        indexSet.removeAllIndexes()
      }
    }
  }
  
  //点击单元格会引起cell高度的变化，所以要重新设置
  func tableView(tableView: UITableView,heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    
    if indexPath.row == 0{
      return 40
    }
    return RookieCell.cellDetilHeight(self.detilInfo[indexPath.row - 1])
  }
}

